enum Gender { male = "男", female = "女" }

class User {
    // 属性列表
    name: string
    age: number

    // 属性初始化
    gender: Gender = Gender.male

    //可选属性
    // pid: string | null = null // 非必须
    // 简写为
    pid?: string

    // 修饰为只读属性
    readonly id: string

    // 私有属性 
    private publicNumber: number = 10 // 每天一共可以发多少篇文章数量
    private curNumber: number = 0 // 当前可以发布篇文章数量
    // 或者使用 class 私有属性
    // #publicNumber: number = 10 // this.#publicNumber
    // #curNumber: number = 0


    constructor(name: string, age: number) {
        // 创建属性应该单独写 不应该动态创建属性
        this.name = name;
        this.age = age;

        this.id = (Math.random() + '');
    }

    // 发布文章
    publish(title: string) {
        if (this.curNumber < this.publicNumber) {
            console.log('发布文章：' + title);
            this.curNumber++
        } else {
            console.log('今日文章已发布达到上限');
        }
    }

}

const u = new User('user', 3)
u.gender = Gender.female
// u.publicNumber
// 属性'publicNumber'是私有的，只能在类'User'中访问  
// Property 'publicNumber' is private and only accessible within class 'User' 





class Per {
    private _age: number
    constructor(public name: string, age: number) {
        this._age = age
    }

    // 设置年龄：不能是小数，负数，取值范围
    set age(val) {
        val = val < 0 ? 0 : val; // 大于于0
        val = val >= 200 ? 200 : val;// 小于200
        val = Math.floor(val) // 向下取整
        this._age = val
    }
    get age() {
        return this._age
    }

}
const p = new Per('ppp', 18)
p.age
p.age = 18